#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

/* 思路：
 *      1、使用双指针
 *      2、当两边高度相同的情况下，两边相距越远越好，所以从左右两边开始向中间靠拢
 *      3、下一步到底该移动哪个指针？
 *          a、首先容量由较低的那个柱子决定，也就是说我们需要做的事寻找比较低的柱子更高的柱子
 *          b、所以肯定要移动较低的柱子
 */
class Solution {
public:
    int maxArea(vector<int>& height) {
        int maxArea = 0;
        if (height.size() == 0 || height.size() == 1) {
            return 0;
        }

        int left = 0;
        int right = height.size() - 1;
        int temp = 0;
        while (left < right) {
            temp = min(height[left], height[right]) * (right - left);
            maxArea = temp > maxArea ? temp : maxArea;
            if (height[left] > height[right]) {
                --right;
            } else {
                ++left;
            }
        }

        return maxArea;
    }
};

int main()
{
    Solution sol;
    vector<int> vec{1,8,6,2,5,4,8,3,7};
    cout<<sol.maxArea(vec)<<endl;
    return 0;
}